//
//  CYHUD+Status.m
//  CYBaseKit
//
//  Created by admin on 2022/10/8.
//

#import "CYHUD+Status.h"
#import "CYHUD+Config.h"

#import "SVProgressHUD.h"

typedef NS_ENUM(NSInteger, CYHUDStatus) {
    /// 成功
    CYHUDStatusSuccess,
    /// 错误
    CYHUDStatusError,
    /// 信息
    CYHUDStatusInfo
};


@implementation CYHUD (Status)

#pragma mark - HUD Success

/**
 * 显示 成功
 * 默认 @"成功"
 */
+ (void)showSuccess {
    [self showSuccessWithText:@"完成"];
}

/**
 * 显示 成功
 * @param text  自定义显示内容
 */
+ (void)showSuccessWithText:(NSString *__nullable)text {
    [self showSuccessWithText:text completion:nil];
}

/**
 * 显示 成功
 * @param text 自定义显示内容
 * @param completion 消失的回调
 */
+ (void)showSuccessWithText:(NSString *__nullable)text CY_HUD_COMPLETION {
    [self showStatus:CYHUDStatusSuccess text:text completion:completion];
}

#pragma mark - HUD Error

/**
 * 显示 失败
 * 默认 @"失败了!"
 */
+ (void)showError {
    [self showErrorWithText:@"失败了!"];
}

/**
 * 显示 失败
 * @param text  自定义显示内容
 */
+ (void)showErrorWithText:(NSString *__nullable)text {
    [self showErrorWithText:text completion:nil];
}

/**
 * 显示 失败
 * @param text  自定义显示内容
 * @param completion 消失的回调
 */
+ (void)showErrorWithText:(NSString *__nullable)text CY_HUD_COMPLETION {
    [self showStatus:CYHUDStatusError text:text completion:completion];
}

#pragma mark - HUD Info

/**
 * 显示 信息
 * 默认 @""
 */
+ (void)showInfo {
    [self showInfoWithText:@""];
}

/**
 * 显示 信息
 * @param text  自定义显示内容
 */
+ (void)showInfoWithText:(NSString *__nullable)text {
    [self showInfoWithText:text completion:nil];
}

/**
 * 显示 信息
 * @param text  自定义显示内容
 * @param completion 消失的回调
 */
+ (void)showInfoWithText:(NSString *__nullable)text CY_HUD_COMPLETION {
    [self showStatus:CYHUDStatusInfo text:text completion:completion];
}

/**
 * 显示hud的状态
 * @param status 当前状态
 * @param text 显示文字内容
 * @param completion 隐藏后回调
 */
+ (void)showStatus:(CYHUDStatus)status text:(NSString *__nullable)text CY_HUD_COMPLETION {
    [self hideLoadingHUD];

    [self configHUDStatusStyle];

    switch (status) {
        case CYHUDStatusSuccess:
            [SVProgressHUD showSuccessWithStatus:text];
            break;
        case CYHUDStatusError:
            [SVProgressHUD showErrorWithStatus:text];
            break;
        case CYHUDStatusInfo:
            [SVProgressHUD showInfoWithStatus:text];
            break;
    }

    [SVProgressHUD dismissWithDelay:CY_HUD_DISPLAY_TIME_DEFAULT];
    if (completion) {
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, CY_HUD_DISPLAY_TIME_DEFAULT * NSEC_PER_SEC);
        dispatch_after(popTime, dispatch_get_main_queue(), ^{
            completion();
        });
    }
}
@end
